**free

// To Compile:
//
// *>   CRTRPGMOD MODULE(UDFDEMO1) SRCFILE(QRPGLESRC) DBGVIEW(*LIST)
// *>   CRTSRVPGM SRVPGM(UDFDEMO1) EXPORT(*ALL)


ctl-opt nomain option(*srcstmt);




dcl-c PARM_NULL -1;



dcl-proc toMdy export;

  dcl-pi *n char(10);
    ymd packed(8: 0) const;
  end-pi;

  dcl-s retval char(10);

  monitor;
    retval = %char( %date(ymd:*iso) : *USA );
  on-error;
    retval = 'ERROR';
  endmon;

  return retval;
end-proc;



dcl-proc toIso export;

  dcl-pi *n packed(8: 0);
    cymd packed(7: 0) const;
  end-pi;

  dcl-s retval packed(8: 0);

  monitor;
    retval = %dec( %date(cymd:*cymd) : *ISO );
  on-error;
    retval = -1;
  endmon;
  return retval;

end-proc;



dcl-proc countYears export;

  dcl-pi *n int(10);
    hireDate packed(8: 0) const;
    termDate packed(8: 0) const;
  end-pi;

  dcl-s myTerm date inz(*sys);
  dcl-s retval int(10);

  monitor;
    if (termDate <> 0);
      myTerm = %date(termDate:*iso);
    endif;
    retval = %diff( myTerm
                  : %date( hireDate : *iso)
                  : *YEARS );
  on-error;
    retval = -1;
  endmon;

  return retval;

end-proc;



dcl-proc yearsActiveSql export;

  dcl-pi *n;
    hireDate     packed(8: 0) const;
    termDate     packed(8: 0) const;
    yearCount    int(10);
    n_hireDate   int(5)       const;
    n_termDate   int(5)       const;
    n_yearCount  int(5);
    state        char(5);
    function     varchar(517) const;
    specific     varchar(128) const;
    errorMsg     varchar(1000);
  end-pi;

  dcl-s myTerm     date inz(*sys);

  monitor;
    if n_termDate<>PARM_NULL and termDate <> 0;
       myTerm = %date(termDate:*iso);
    endif;
  on-error;
    state    = '38999';
    errorMsg = 'Invalid termination date!';
    return;
  endmon;

  if n_hireDate = PARM_NULL;
    state    = '38998';
    errorMsg = 'Hire date cannot be null!';
  endif;

  monitor;
    yearCount = %diff( myTerm
                     : %date( hireDate : *iso)
                     : *YEARS );
  on-error;
    state    = '38997';
    errorMsg = 'Invalid hire date!';
  endmon;

  return;
end-proc; 